home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Gekkan Dennou Club 145
/
Gekkan Dennou Club - 2000.6 Vol. 145 (Japan).7z
/
Gekkan Dennou Club - 2000.6 Vol. 145 (Japan) (Track 1).bin
/
tools
/
sharp
/
xc2103i.lzh
/
XC2103.XDF
/
ASK30
/
FILES.C
< prev
next >
Wrap
C/C++ Source or Header
|
1993-09-15
|
3KB
|
169 lines
/*
** FILES for ASK3
** Copyright (C) 1992 ACCESS CO.,LTD.
*/
#include "aci.h"
#include "askkey.h"
typedef unsigned char u_char;
short acc_main();
u_char cbuf[80];
MEAN kbuf[32];
MEAN mbuf[9];
ACC_DEF acc = {
KS_EDIT0|KS_EDITING|KS_SELECT,
NOT_ASCII|CTRL_ON|TOUROKU_KEY,
acc_main,
{
cbuf, kbuf, mbuf
}
};
short acc_main(code)
BIT16 code;
{
static int first = 1;
BIT16 nc, ascii, mask_key();
u_char *strcat();
void init(), skip(), back(), next(), enter();
if (first) {
init();
first = !first;
return(DF_KWINSTR|DF_MWINSTR|CACI_NORMAL);
}
nc = mask_key(code);
if (!(nc & NOT_ASCII)) {
ascii = nc & 0xff;
if ((nc & SHIFT_ON) && (ascii >= 0x20 && ascii <= 0xff)) {
skip(ascii);
} else if (nc == '\033') {
first = 1;
return(CACI_END);
} else if (nc == '\r') {
enter();
return(DF_OUTSTR|CACI_SUSPEND);
} else {
cbuf[0] = nc;
cbuf[1] = '\0';
return(DF_OUTSTR|CACI_SUSPEND);
}
} else {
switch(nc) {
case NOT_ASCII|UP_KEY:
back();
break;
case NOT_ASCII|DOWN_KEY:
next();
break;
case CTRL_ON|NOT_ASCII|XF1_KEY:
first = 1;
return(KEY_AGAIN|CACI_END);
break;
case NOT_ASCII|CTRL_ON|TOUROKU_KEY:
first = 1;
return(CACI_END);
default:
break;
}
}
return(DF_KWINSTR|CACI_NORMAL);
}
#define MAXFILES 128
static u_char flist[MAXFILES][23];
static short fcnt, ftotal;
static void init()
{
extern u_char fname[];
int files(), nfiles(), sstrtom();
u_char *strcpy();
fcnt = ftotal = 0;
/*ディレクトリエントリをバッファに詰める*/
/*128個を越えたら切る*/
if (files() == 0) {
do {
if (fname[0] == '.')
continue;
strcpy(flist[ftotal++], fname);
} while (nfiles() == 0 && ftotal <= MAXFILES);
sstrtom(flist[0], kbuf, 0);
}
sstrtom("ファイル選択", mbuf, 0);
}
static void skip(nc)
BIT16 nc;
{
int i;
for (i = ((fcnt + 1 >= ftotal) ? 0 : fcnt+1);
i != fcnt; i = ((i + 1 >= ftotal) ? 0 : i + 1)) {
if (toupper(nc) == toupper(flist[i][0])) {
fcnt = i;
sstrtom(flist[fcnt], kbuf, 0);
return;
}
}
}
static int toupper(int c)
{
if (c >= 'a' && c <= 'z')
return(c - 0x20);
else
return(c);
}
static void back()
{
if (fcnt > 0)
sstrtom(flist[--fcnt], kbuf, 0);
}
static void next()
{
if (fcnt < ftotal-1)
sstrtom(flist[++fcnt], kbuf, 0);
}
static void enter()
{
strcpy(cbuf, flist[fcnt]);
}
static BIT16 mask_key(code)
BIT16 code;
{
code &= (0xff|CTRL_ON|SHIFT_ON|NOT_ASCII);
if (!(code & NOT_ASCII))
code &= ~CTRL_ON;
return(code);
}
static u_char *strcpy(s1, s2)
u_char *s1, *s2;
{
u_char *ret = s1;
while (*s1++ = *s2++)
;
return(ret);
}
static u_char *strcat(s1, s2)
u_char *s1, *s2;
{
u_char *ret = s1;
while (*s1)
s1++;
while (*s1++ = *s2++)
;
return(ret);
}